const Router = require('koa-router');
const {
  readData,selectInfos,selectInfo, upData,
  routerReturnValue,addId,addAndUpload,deleteIndoById
} = require('./utils/files.js')
const router = new Router();
// const qs = require('qs');


// 测试
router.get('/abc',async (ctx) =>{
  // 返回的是一个对象
  ctx.body= 'ok';
})

// 登录
/**
 * info传入信息
 * @param {String} uName 用户名
 * @param {String} pwd 密码
 * 返回用户信息
*/
router.post("/login",async (ctx) => {
  // 定义是否获取到数据
  let flag = false;
  const infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);
  let theUser ={};

  dataInfo.accounts.forEach(item => {
    if(item.userinfo.uName == infos.uName) {
      if(item.userinfo.pwd == infos.pwd) {
        theUser = item;
        flag = true;
        // 键值对的形式，设置页name是user，
        ctx.cookies.set(item.userinfo.uName,item.userinfo.id,{
          // 设置cookie保存时间,保存7天（7天免登录）
          expires:new Date(Date.now()*7*24*60*60*1000),
          // 是否使用http
          httpOnly:true,
          // 是否覆盖cookie，（新建cookie与旧cookie重名时）
          overwrite:true
        });
        console.log("马上就要跳转了")
      }
    }
  })
  routerReturnValue(ctx,flag,theUser)
})

// 用户管理
  /**
   * info传入信息
   * @param {String} washPosition 应聘职位
   * @param {String} degree 学历
   * @param {String} statas 状态
   * @param {String} name 姓名
   * 返回匹配信息
   * selectInfos 返回匹配数据
  */
  router.post("/getuserinfo",async ctx =>{
    const infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    // 筛选数据
    const {userList , flag}=selectInfos(dataInfo,infos);
    console.log(userList , flag)
    
  // console.log(userInfo)
  routerReturnValue(ctx,flag,userList)
})

// 用户信息是否可用
/**
 * info传入信息
 * @param {boolean} canUse  
 * @param {Number} id
 * 返回ture，或false
*/
router.post("/checkuserinfo",async ctx =>{
    const infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);
    let flag = false

    dataInfo.accounts.forEach(item => {
      if(item.userinfo.id === infos.id && item.resumeInfo.baseInfo.canUse !== infos.canUse){
        item.resumeInfo.baseInfo.canUse = infos.canUse;
        // 保存修改后的信息
        upData(JSON.stringify(dataInfo))
        .then((res)=>{
          flag = res;
          routerReturnValue(ctx,flag,dataInfo)
        });
      }else {
        routerReturnValue(ctx,flag,dataInfo)
      }
    })

})

// 公司列表
/**
 * info传入信息
 * @param {String} industry 行业
 * @param {Boolean} hotCompany 热门公司
 * @param {String} companName 公司名
*/
router.post('/getcompanyinfo',async ctx =>{
    const infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    // 筛选数据
    const {userList , flag}=selectInfo(dataInfo,infos,"companylist");
    
  // console.log(userInfo)
  routerReturnValue(ctx,flag,userList)
})

// 公司信息设置
/**
 * info传入信息
 * @param {Number} id  
 * @param {Boolean} needCheck  岗位审核
 * @param {Boolean} isUse 启用/禁用
 * @param {Boolean} hotCompany 热门公司
*/
router.post("/changecompanyinfo",async ctx =>{
    const infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);
    let flag = false

    dataInfo.companylist.forEach(item => {
      if(item.info.id === infos.id ){
        if(item.info.needCheck !== infos.needCheck || 
          item.info.isUse !== infos.isUse || 
          item.info.hotCompany !== infos.hotCompany){
            // console.log(item)
            // 有传入值就是用传入值，没有就使用原来的值
            item.info.needCheck = infos.needCheck || item.info.needCheck;
            item.info.isUse = infos.isUse || item.info.isUse;
            item.info.hotCompany = infos.hotCompany || item.info.hotCompany;
            // 保存修改后的信息
            // console.log(item)
            upData(JSON.stringify(dataInfo))
            .then((res)=>{
              flag = res;
              routerReturnValue(ctx,flag,item)
            });
          }else {
            routerReturnValue(ctx,flag,item)
          }
      }else {
        routerReturnValue(ctx,flag,item)
      }
    })
})

// 审核管理
/**
 * info传入信息
 * @param {String} industry 行业  互联网 
 * @param {String} count 规模，人数   100-200人  150-200人 .....
 * @param {String} state 审核状态  审核中 审核通过  审核不通过
 * @param {String} companName 公司名   二程文化公司
*/
router.post("/getauditinfo",async ctx =>{
  const infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    // 筛选数据
    const {userList , flag}=selectInfo(dataInfo,infos,"auditmana");
    
  // console.log(userInfo)
  routerReturnValue(ctx,flag,userList)
})

// 审核是否通过
/**
 * info传入信息
 * @param {Number} id  
 * @param {Object} states  审核信息  {"state":"审核中","msg":"图片太模糊"}
*/
router.post("/checkaudit",async ctx => {
    const infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);
    let flag = false

    dataInfo.auditmana.forEach(item => {
      if(item.info.id === infos.id ){
        if(item.info.states.state !== infos.states.state || 
          item.info.states.msg !== infos.states.msg){
            item.filterInfo.state = infos.states.state || item.filterInfo.state;
            item.info.states.state = infos.states.state || item.info.states.state;
            item.info.states.msg = infos.states.msg || item.info.states.msg;
            // 保存修改后的信息
            // console.log(item)
            upData(JSON.stringify(dataInfo))
            .then((res)=>{
              flag = res;
              routerReturnValue(ctx,flag,item)
            });
          }else {
            routerReturnValue(ctx,flag,item)
          }
      }else {
        routerReturnValue(ctx,flag,item)
      }
    })
})

// 简历管理
/**
 * @param {String} industry 应聘职位 ---互联网，
 * @param {data} upDateTime 更新时间 ---
 * @param {String} name 姓名 --- 李思思
*/
router.post("/getresumeinfo",async ctx =>{
  const infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    // 筛选数据
    const {userList , flag}=selectInfo(dataInfo,infos,"resumeInfo");
    
  // console.log(userInfo)
  routerReturnValue(ctx,flag,userList)
})

// 简历删除
/**
 * info传入信息
 * @param {Number} id   用户id
 * @param {Number} index   简历索引
*/
router.post("/upDataResume",async ctx =>{
  const infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);
    let flag = false

    dataInfo.resumeInfo.forEach(item => {
      if(item.info.id === infos.id ){
        item.info.annexResume.splice(infos.index,1)

        upData(JSON.stringify(dataInfo))
            .then((res)=>{
              flag = res;
              routerReturnValue(ctx,flag,item)
            });
      }else {
        routerReturnValue(ctx,flag)
      }
    })
})

// banner管理
/**
 * info传入信息
 * @param {String} activeTitle 活动标题   推广有理
 * @param {String} where 位置   全部，首页
 * 
*/
router.post("/getbannerinfo",async ctx => {
  const infos = ctx.request.body;
  if(infos.where === "全部"){
    delete infos.where
  }
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    // 筛选数据
    const {userList , flag}=selectInfo(dataInfo,infos,"bannerManage");
    
  // console.log(userInfo)
  routerReturnValue(ctx,flag,userList)
})

// banner删除，修改，移动
/**
 * info传入信息
 * @param {Number} id   
 * @param {Boolean} isShow   是否显示 true/false
 * @param {String} where   位置  首页
 * @param {String} region   区域  1
 * @param {String} activeTitle   活动标题  推广有理
 * @param {String} picture   图片  图片地址
*/
router.post("/updatabanner",async ctx =>{
    let infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    // 自动添加id
    infos =  addId(infos,dataInfo,"bannerManage");

    // 数据处理
    addAndUpload(ctx,infos,dataInfo,"bannerManage")
})

// 资讯页面管理
/**
 * @param {Number} id   // 新增不需要id
 * @param {Number} sort   排序
 * @param {String} title   标题
 * @param {String} author   作者
 * @param {Date} uploadTime 上传时间  //新曾没有这个属性
 * @param {String} content 内容
 * @param {String} uploadPicture 上传图片 //修改没有这个属性
*/
router.post("/uploadinfo",async ctx =>{
    let infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    // 自动添加id
    infos =  addId(infos,dataInfo,"infoManage");

    // 数据处理
    addAndUpload(ctx,infos,dataInfo,"infoManage")
})


// 资讯信息删除
/**
 * @param {Array} arr 需要删除信息的id 
*/
router.post("/upload/deleteinfo",async ctx => {
    let infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    deleteIndoById(ctx,infos.arr,dataInfo,"infoManage");
})


// 全局设置
// 常用语设置
// 删除 入驻审核不通过理由
/**
 * @param {Array} arr 需要删除信息的id
*/
router.post("/global/setworlds", async ctx => {
    let infos = ctx.request.body;
    const data =  await readData();
    const dataInfo = JSON.parse(data);

    deleteIndoById(ctx,infos.arr,dataInfo,"globalSettingWorlds");
})

// 删除 岗位发布审核不通过理由
/**
 * @param {Array} arr 需要删除信息的id
*/
router.post("/global/setworlds2", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  deleteIndoById(ctx,infos.arr,dataInfo,"globalSettingWorlds2");
})

// 不输入任何数据就是获取所有信息
// 添加修改 入驻审核不通过理由 
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {String} auditFailedReasons 入驻审核不通过理由 
*/
router.post("/global/updataworld", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"globalSettingWorlds");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"globalSettingWorlds")
})

// 添加修改 岗位发布审核不通过理由
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {String}  jobPosition 岗位发布审核不通过理由
*/
router.post("/global/updataworld2", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"globalSettingWorlds2");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"globalSettingWorlds2")
})


// 热门职位搜索
// 删除
/**
 * @param {Array} arr 需要删除信息的id
 * */ 
router.post("/global/deletehotposition",async ctx =>{
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  deleteIndoById(ctx,infos.arr,dataInfo,"hotSearchPosition");
})

// 添加修改 获取信息
// 添加修改 岗位发布审核不通过理由
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {Boolean}  isShow 是否显示
 * @param {Number}  sort 排序
 * @param {String}  content 内容
*/
router.post("/global/hotposition", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"hotSearchPosition");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"hotSearchPosition")
})

// 热门城市搜索
// 删除
/**
 * @param {Array} arr 需要删除信息的id
 * */ 
 router.post("/global/deletehotcity",async ctx =>{
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  deleteIndoById(ctx,infos.arr,dataInfo,"hotSearchCity");
})

// 添加修改 获取信息
// 添加修改 岗位发布审核不通过理由
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {Boolean}  isShow 是否显示
 * @param {Number}  sort 排序
 * @param {String}  content 内容
 * @param {String}  picture 图片地址
*/
router.post("/global/hotcity", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"hotSearchCity");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"hotSearchCity")
})


// 职位套餐
// 删除
/**
 * @param {Array} arr 需要删除信息的id
 * */ 
 router.post("/global/deletepositioncom",async ctx =>{
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  deleteIndoById(ctx,infos.arr,dataInfo,"positionCom");
})

// 添加修改 获取信息
// 添加修改 
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {String}  name 套餐名
 * @param {Number}  price 价格
 * @param {Number}  jobPositionCountent 职位个数
 * @param {Number}  interviewsPeopleCount 面试人数
 * @param {String}  freeServe 赠送服务i
*/
router.post("/global/positioncom", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"positionCom");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"positionCom")
})


// 初始密码
// 删除
/**
 * @param {Array} arr 需要删除信息的id
 * */ 
 router.post("/global/deletepositioncom",async ctx =>{
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  deleteIndoById(ctx,infos.arr,dataInfo,"positionCom");
})

// 添加修改 获取信息
// 添加修改
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {Boolean}  isShow 是否显示
 * @param {Number}  sort 排序
 * @param {String}  content 内容
*/
router.post("/global/positioncom", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"positionCom");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"positionCom")
})

// 初始密码
// 删除
/**
 * @param {Array} arr 需要删除信息的id
 * */ 
 router.post("/global/deleteinitpwd",async ctx =>{
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  deleteIndoById(ctx,infos.arr,dataInfo,"initPwdSetting");
})

// 修改 获取信息
// 修改 
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {String}  initPwd 初始密码
*/
router.post("/global/initpwd", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"initPwdSetting");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"initPwdSetting")
})


// 数据报表

router.post("/getdatareport" ,async ctx =>{
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 筛选数据
  const {userList , flag}=selectInfo(dataInfo,infos,"DataReport");
  routerReturnValue(ctx,flag,userList)
})

// 人员管理
// 删除
/**
 * @param {Array} arr 需要删除信息的id
 * */ 
 router.post("/delete/psersonmanage",async ctx =>{
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  deleteIndoById(ctx,infos.arr,dataInfo,"psersonManage");
})

// 修改 获取信息
// 修改 
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {String}  uName 用户名
 * @param {String}  name 姓名
 * @param {String}  phone 电话
 * @param {String}  role 角色
 * @param {String}  creatDate 创建时间
 * @param {Boolean}  status 状态
*/
router.post("/updata/psersonmanage", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"psersonManage");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"psersonManage")
})


// 权限设置
// 删除
/**
 * @param {Array} arr 需要删除信息的id
 * */ 
 router.post("/delete/permissionsettings",async ctx =>{
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  deleteIndoById(ctx,infos.arr,dataInfo,"permissionSettings");
})

// 修改 获取信息
// 修改 
/**
 * @param {Number}  id 有id就是修改，没有id就是添加
 * @param {String}  uName 用户名
 * @param {String}  name 姓名
 * @param {String}  phone 电话
 * @param {String}  role 角色
 * @param {String}  creatDate 创建时间
 * @param {Boolean}  status 状态
*/
router.post("/updata/permissionsettings", async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 自动添加id
  infos =  addId(infos,dataInfo,"permissionSettings");

  // 数据处理
  addAndUpload(ctx,infos,dataInfo,"permissionSettings")
})

// 角色权限设置
router.post("/setpermission",async ctx => {
  let infos = ctx.request.body;
  const data =  await readData();
  const dataInfo = JSON.parse(data);

  // 
  dataInfo.permissionSettings.permissionSet = infos;

  routerReturnValue(ctx,true,dataInfo.permissionSettings.permissionSet)
})

module.exports = router;